Pandas 数据对比 |
您所在的位置:网站首页 › python pandas 筛选 › Pandas 数据对比 |
df.compare() 和s.compare() 方法使您可以分别比较两个DataFrame 或 Series,并总结它们之间的差异。V1.1.0 中添加了此功能。 语法语法如下: pd.compare(other, align_axis=1, keep_shape=False, keep_equal=False)其中: other:被对比的数据align_axis=1:差异堆叠在列/行上keep_shape=False:不保留相等的值keep_equal=False:不保留所有原始行和列用法例如,您可能想要比较两个DataFrame并并排堆叠它们的差异。 df = pd.DataFrame( { "col1": ["a", "a", "b", "b", "a"], "col2": [1.0, 2.0, 3.0, np.nan, 5.0], "col3": [1.0, 2.0, 3.0, 4.0, 5.0] }, columns=["col1", "col2", "col3"], )df ''' col1 col2 col3 0 a 1.0 1.0 1 a 2.0 2.0 2 b 3.0 3.0 3 b NaN 4.0 4 a 5.0 5.0 ''' # 对数据进行修改以便进行对比 df2 = df.copy() df2.loc[0, 'col1'] = 'c' df2.loc[2, 'col3'] = 4.0 df2 ''' col1 col2 col3 0 c 1.0 1.0 1 a 2.0 2.0 2 b 3.0 4.0 3 b NaN 4.0 4 a 5.0 5.0 '''应用对比: df.compare(df2) ''' col1 col3 self other self other 0 a c NaN NaN 2 NaN NaN 3.0 4.0 '''默认情况下,如果两个对应的值相等,它们将显示为NaN。 此外,如果整个行/列中的所有值都将从结果中省略。 其余差异将在列上对齐。 其他方法还可以传入以下参数: df = pd.DataFrame( { "col1": ["a", "a", "b", "b", "a"], "col2": [1.0, 2.0, 3.0, np.nan, 5.0], "col3": [1.0, 2.0, 3.0, 4.0, 5.0] }, columns=["col1", "col2", "col3"], ) df ''' col1 col2 col3 0 a 1.0 1.0 1 a 2.0 2.0 2 b 3.0 3.0 3 b NaN 4.0 4 a 5.0 5.0 '''修改数据,方便对比: df2 = df.copy() df2.loc[0, 'col1'] = 'c' df2.loc[2, 'col3'] = 4.0 df2 ''' col1 col2 col3 0 c 1.0 1.0 1 a 2.0 2.0 2 b 3.0 4.0 3 b NaN 4.0 4 a 5.0 5.0 '''显示有差异的列: df.compare(df2) ''' col1 col3 self other self other 0 a c NaN NaN 2 NaN NaN 3.0 4.0 '''将差异堆叠在行上: df.compare(df2, align_axis=0) ''' col1 col3 0 self a NaN other c NaN 2 self NaN 3.0 other NaN 4.0 '''保留相等的值: df.compare(df2, keep_equal=True) ''' col1 col3 self other self other 0 a c 1.0 1.0 2 b b 3.0 4.0 '''保留所有原始行和列: df.compare(df2, keep_shape=True) ''' col1 col2 col3 self other self other self other 0 a c NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN 3.0 4.0 3 NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN '''保留所有原始行和列以及所有原始值: df.compare(df2, keep_shape=True, keep_equal=True) ''' col1 col2 col3 self other self other self other 0 a c 1.0 1.0 1.0 1.0 1 a a 2.0 2.0 2.0 2.0 2 b b 3.0 3.0 3.0 4.0 3 b b NaN NaN 4.0 4.0 4 a a 5.0 5.0 5.0 5.0 '''数据相同此外,还可以使用df1.equals(df2)来对比两个数据是否一致,测试两个对象是否包含相同的元素。 此功能允许将两个Series或DataFrame相互比较,以查看它们是否具有相同的形状和元素。 相同位置的NaN被认为是相等的。 列标题不必具有相同的类型,但是列中的元素必须具有相同的dtype。 此功能要求元素与其他Series或DataFrame中的元素具有相同的dtype。 但是,列标签不必具有相同的类型,只要它们仍被视为相等即可。 df = pd.DataFrame({1: [10], 2: [20]}) df 1 2 0 10 20DataFrames df和fully_equal的元素和列标签具有相同的类型和值,它们将返回True。 exactly_equal = pd.DataFrame({1: [10], 2: [20]}) exactly_equal ''' 1 2 0 10 20 ''' df.equals(exactly_equal) # TrueDataFrames df和different_column_type具有相同的元素类型和值,但列标签具有不同的类型,它们仍将返回True。 different_column_type = pd.DataFrame({1.0: [10], 2.0: [20]}) different_column_type ''' 1.0 2.0 0 10 20 ''' df.equals(different_column_type) # TrueDataFrames df和different_data_type为其元素的相同值具有不同的类型,即使它们的列标签具有相同的值和类型,它们也将返回False。 different_data_type = pd.DataFrame({1: [10.0], 2: [20.0]}) different_data_type ''' 1 2 0 10.0 20.0 ''' df.equals(different_data_type) # False 提一嘴,现在新版本的pandas 中可以直接用compare对比了 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |